""""""
"""映射
可以通过名称来访问各个值的数据结构
"""

"""字典
字典是Python中唯一的内置映射类型, 其值不按顺序排列, 键可能是任意不可变类型, 例如数字、字符串或元祖
"""

"""字典的用法
"""
person = {'name':'zhangsan', 'age': 11}
# dict函数
person = [('name', 'zhangsan'), ('age', 11)]
p = dict(person)
print(p) # {'name': 'zhangsan', 'age': 11}
print(p['name'])
p['name'] = 'lisi'
p[11] = 'num'
print(p) # {'name': 'lisi', 'age': 11, 11: 'num'}

# copy, 浅拷贝
p1 = p.copy()
p1[11] = 12
print(p, p1) # {'name': 'lisi', 'age': 11, 11: 'num'} {'name': 'lisi', 'age': 11, 11: 12}

# 清空
p.clear()
print(p) #{}

# fromkeys
# 先创建一个空字典, 再对其调用fromkeys方法创建另外一个字典, 值全是None
p = {}.fromkeys(['name', 'age'])
print(p) # {'name': None, 'age': None}
# 上面的方式会先创建一个空字段, 有点多余, 我们可以直接对dict调用fromkeys方法
p1 = dict.fromkeys(['name', 'age'])
print(p1) # {'name': None, 'age': None}

p = {'name':'zhangsan', 'age': 11}
#get
print(p['name']) # 如果key不存在会报错
print(p.get('name1')) # 不存在会返回None
print(p.get('name1', 'zhangsan'))# 不存在会返回默认值

# items
lst = p.items()
print(lst) # dict_items([('name', 'zhangsan'), ('age', 11)])
print(list(lst)) # [('name', 'zhangsan'), ('age', 11)]

# keys
print(p.keys()) # dict_keys(['name', 'age'])
print(list(p.keys())) # ['name', 'age']

#values
print(p.values()) # dict_values(['zhangsan', 11])

# pop 根据key删除元素
#p.pop('name')
#print(p) # {'age': 11}

# popitem, 删除最后一个元素
p.popitem()
print(p) # {'name': 'zhangsan'}

# setdefault, 类似于get, 不同的地方是当字典不包含key时, 会在字典中添加指定的键值对
p.setdefault('name', 'aaa')
p.setdefault('address', '郑州市')
print(p) #{'name': 'zhangsan', 'address': '郑州市'}

# update, 使用一个字典的项来更新另外一个字典的项
p1 = {'name':'lisi'}
p.update(p1)
print(p) # {'name': 'lisi', 'address': '郑州市'}

"""
循环
"""
# for k in person:
#     print("%s : %s" % (k, person[k]))